PunkOS 数据库应用
PunkOS 底层采用 RayDB 这个 NoSQL 数据库。PunkOS 数据库应用是一个上层应用,用来对 RayDB 数据进行管理。
数据库应用的功能,除了管理 PunkOS 内的数据外,同时也支持用户直接通过该应用,创建自定义数据。
因此 RayDB 数据库中的数据,主要可以分为两类:App 中定义的数据、用户直接在数据库应用中定义的数据。
UserStory
梳理几类使用场景。
时间序列存储
我对统计学非常感兴趣,首先想到的是存储时间序列。
我希望用户能够创建自己的时间序列。
时间序列按照频率,分为年度、半年度、季度、月度、日频率、小时频率、分钟频率。
在划分数据库表结构上,有两种考虑:
- 按指标来建表,每种指标一个表
- 按频率来建表,每种频率一个表
我考虑使用后者。因为对于时间序列而言,时间是一个客观物理实体。同一时间下的数据,处于同一个时空上下文,具备相关性。
数据库应用的表
数据库应用自身需要建几张表呢?
- 时间序列功能的指标表:记录包含那些指标
- 时间序列功能的指标字段表:记录每个指标都包含那些字段
- 时间序列功能的年度频率表
- 时间序列功能的半年度频率表
- 时间序列功能的季度频率表
- 时间序列功能的月度频率表
- 时间序列功能的日度频率表
时间序列功能:指标表
字段 | 名称 | 类型 | 说明 |
---|---|---|---|
id | 主键 | 数值 | 指标的唯一标识,字段、数据表都以此为关联依据 |
name | 指标名称 | 字符串 | 中文名称 |
description | 指标说明 | 字符串 | 介绍 |
frequency | 频率 | 字符串枚举 | 枚举定义:
|
注:时间序列功能的小时、分钟由于频率太高,暂时先不考虑,后续用到时,扩充成本也低,再扩充即可。
时间序列功能:指标表字段表
字段 | 名称 | 类型 | 说明 |
---|---|---|---|
id | 主键 | 数值 | 指标的唯一标识,字段、数据表都以此为关联依据 |
name | 指标名称 | 字符串 | 中文名称 |
description | 指标说明 | 字符串 | 介绍 |
ts_id | 对应的时间序列指标 | 数值 | 不可为空 |
时间序列功能:年度频率表
字段 | 名称 | 类型 | 说明 |
---|---|---|---|
id | 主键 | 数值 | 指标的唯一标识,字段、数据表都以此为关联依据 |
ts_id | 对应的时间序列指标 | 数值 | 不可为空 |
f_id | 对应的时间序列字段 | 数值 | 不可为空 |
year | 年份 | 数值 | 不可为空 |
value | 具体值 | 数值 | 不可为空 |
通用时间序列表
在不同频率的表内,包含有以下列:
- 指标 indicator-id
- 指标属性 key-id
- 值 value
时间序列功能
时间序列作为一个专门的子功能。
时间序列需要有一个专门的表,容纳创建的时间序列指标。在界面体现上,有一个子列表展示所有的时间序列指标。